#ifndef FLUID2D_H
#define FLUID2D_H

#include <malloc.h>
#include <math.h>
#include <stdio.h>

class Fluid2D
{
public:
	Fluid2D(void);
	~Fluid2D(void);
	void Setup(int n, float dt);
	void ApplyBuoyancy(float** Fbuoy);
	void AddSourceU(float ** x, float ** x0);
	void AddSourceV(float ** x, float ** x0);
	void AddSourceD(float ** x, float ** x0);
	void AdvectU(int b, float** d, float** d0, float** du, float** dv);
	void AdvectV(int b, float** d, float** d0, float** du, float** dv);
	void AdvectD(int b, float** d, float** d0, float** du, float** dv);
	void Project(float** x, float** y);
	float CalCurl(int i, int j);
	void VorticityConfinement(float** Fvc_x, float** Fvc_y);
	void VelocitySolver();
	void DensitySolver();
	void SwapD();
	void SwapU();
	void SwapV();



	float ** density;
	float ** pre_density;
	float ** u;
	float ** pre_u;
	float ** v;
	float ** pre_v;
	float ** A;
	float * b;
	float * buffer;
	float * temp;
	int ** entry;
	float ** curl;

	int n;
	float dt;
};

#endif


